package com.ruoyi.tcp.entity.beat;

import com.ruoyi.tcp.entity.ClientCustomerBaseEntity;
import com.ruoyi.tcp.util.TcpAesUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.util.StringUtils;

import java.io.Serializable;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Objects;

/**
 * @author 蒋翔 SY100242
 * @date 2024/8/6 17:24
 * @email SY100242@hnlens.com
 */
@Setter
@Getter
@ToString
public class BeatEntity extends ClientCustomerBaseEntity implements Serializable {

    private static final long serialVersionUID = 1L;

    //数据发生时间
    private LocalDateTime occurTime;
    //设备编号
    private Long deviceNumber;
    //设备序列号(RFID射频号)
    private String deviceSerializeNumber;



    @Override
    public byte[] getOtherBytesClient() {
        ByteBuf buffer = Unpooled.buffer();
        if(Objects.nonNull(occurTime)) {
            long epochSecondSecond = occurTime.toEpochSecond(ZoneOffset.of("+8"));
            byte[] epochTimeBytes = TcpAesUtil.longToByteArray8(epochSecondSecond);
            buffer.writeBytes(epochTimeBytes);
        }
        if(Objects.nonNull(deviceNumber)) {
            byte[] deviceNumberBytes = TcpAesUtil.longToByteArray16(deviceNumber);
            buffer.writeBytes(deviceNumberBytes);
        }
        if(StringUtils.hasText(deviceSerializeNumber)) {
            byte[] deviceSerializeNumberBytes = TcpAesUtil.hex2byte(deviceSerializeNumber);
            buffer.writeBytes(deviceSerializeNumberBytes);
        }
        return ByteBufUtil.getBytes(buffer);
    }


//    public byte[] createEncryptData(String key) {
//
//        byte[] channelNoBytes = TcpAesUtil.intToByteArray(getChannelNo().intValue());
//
//        byte[] versionBytes = TcpAesUtil.intToByteArray(version.intValue());
//        String version = TcpAesUtil.byte2hex(versionBytes);
//
//
//        byte[] serializeNumberBytes = TcpAesUtil.longToByteArray8(serializeNumber);
//        String serializeNumberStr = TcpAesUtil.byte2hex(serializeNumberBytes);
//
//
//        byte[] typeBytes = TcpAesUtil.intToByteArray(Integer.parseInt(typeStr.substring(2)));
//        String typeStr = TcpAesUtil.byte2hex(typeBytes);
//
//
//        Long sentTimeSecond = sendTime.toEpochSecond(ZoneOffset.of("+8"));
//        byte[] sentTimeSecondByts = TcpAesUtil.longToByteArray8(sentTimeSecond);
//        String sendTimeStr = TcpAesUtil.byte2hex(sentTimeSecondByts);
//
//        long epochSecondSecond = occurTime.toEpochSecond(ZoneOffset.of("+8"));
//        byte[] epochTimeBytes = TcpAesUtil.longToByteArray8(epochSecondSecond);
//        String epochTimeStr = TcpAesUtil.byte2hex(epochTimeBytes);
//
//
//        byte[] deviceNumberBytes = TcpAesUtil.longToByteArray16(deviceNumber);
//        String deviceNumberStr = TcpAesUtil.byte2hex(deviceNumberBytes);
//
//
//        int size = serializeNumberBytes.length + typeBytes.length + sentTimeSecondByts.length + epochTimeBytes.length + deviceNumberBytes.length;
//        byte[] lenBytes = TcpAesUtil.intToByteArray(size);
//        String lenStr = TcpAesUtil.byte2hex(lenBytes);
//
//
//        String needEncrpty = getNeedEncrptyStr(version, lenStr, serializeNumberStr, typeStr, sendTimeStr, epochTimeStr, deviceNumberStr);
//        byte[] encrypt = TcpAesUtil.encrypt(TcpAesUtil.alignByte(needEncrpty), key);
//
//
//        byte[] retByte = new byte[channelNoBytes.length + encrypt.length];
//        System.arraycopy(channelNoBytes, 0, retByte, 0, channelNoBytes.length);
//        System.arraycopy(encrypt, 0, retByte, channelNoBytes.length, encrypt.length);
//
//        return retByte;
//    }
//
//    private String getNeedEncrptyStr(String version, String lenStr, String serializeNumberStr, String typeStr, String sendTimeStr, String epochTimeStr, String deviceNumberStr) {
//        StringBuilder sb = new StringBuilder();
//        //版本
//        sb.append(version);
//        //数据长度
//        sb.append(lenStr);
//        //序列号
//        sb.append(serializeNumberStr);
//        //命令类型
//        sb.append(typeStr);
//        //发送时间
//        sb.append(sendTimeStr);
//        //发生时间
//        sb.append(epochTimeStr);
//        //射频编号
////        sb.append(friNumberStr);
//        //设备编号
//        sb.append(deviceNumberStr);
//        //设备序列号
//        sb.append(deviceSerializeNumber);
//
//
//        String crcStr = TcpAesUtil.createCrcStr(sb.toString());
//        sb.append(crcStr);
//
//        String needEncrpty = sb.toString();
//        return needEncrpty;
//    }


    public static void main(String[] args) {
        BeatEntity beatEntity = new BeatEntity();
        beatEntity.setChannelNo(101L);
        beatEntity.setVersion(2);
//        beatEntity.setLen(34);
        beatEntity.setSerializeNumber(24L);
        beatEntity.setTypeStr("0x2");
        beatEntity.setSendTime(LocalDateTime.now());
        beatEntity.setOccurTime(LocalDateTime.now());
        beatEntity.setDeviceNumber(12345L);
        beatEntity.setDeviceSerializeNumber("AE23C4D23E08CA7D34D53B1E");
        byte[] encryptData = beatEntity.createEncryptBytes("Z4T6U7RL08VJ5Y36");
        System.out.println(TcpAesUtil.byte2hex(encryptData));

    }


}
